Add gtk_grid_remove_{row,column}
authorMatthias Clasen <mclasen@redhat.com>
Sat, 23 Mar 2013 19:40:44 +0000 (15:40 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 23 Mar 2013 19:43:37 +0000 (15:43 -0400)
It is sometimes convenient to deal with entire rows or
columns at a time.
https://bugzilla.gnome.org/show_bug.cgi?id=695994

docs/reference/gtk/gtk3-sections.txt
gtk/gtk.symbols
gtk/gtkgrid.c
gtk/gtkgrid.h

index e39da7f194e61de2e7c6394de45600762e99115c..6f3c4fd1135097f2dc428be4441c8412bdbd71fa 100644 (file)
@@ -7238,6 +7238,8 @@ gtk_grid_attach_next_to
 gtk_grid_get_child_at
 gtk_grid_insert_row
 gtk_grid_insert_column
+gtk_grid_remove_row
+gtk_grid_remove_column
 gtk_grid_insert_next_to
 gtk_grid_set_row_homogeneous
 gtk_grid_get_row_homogeneous
index 417bd2c248214ef19bf08a288e5b9590c62e8d72..96811a5ff4e7ee5ff0c5ebd1e938039f7af0ab8c 100644 (file)
@@ -1205,6 +1205,8 @@ gtk_grid_insert_column
 gtk_grid_insert_next_to
 gtk_grid_insert_row
 gtk_grid_new
+gtk_grid_remove_column
+gtk_grid_remove_row
 gtk_grid_set_column_homogeneous
 gtk_grid_set_column_spacing
 gtk_grid_set_row_homogeneous
index e1df436e80150b6f9e6e84cf5c4e818d404d613e..d392fb1228f81a6de66fbbc3b344818e82f8fe73 100644 (file)
@@ -1684,6 +1684,57 @@ gtk_grid_insert_row (GtkGrid *grid,
     }
 }
 
+/**
+ * gtk_grid_remove_row:
+ * @grid: a #GtkGrid
+ * @position: the position of the row to remove
+ *
+ * Removes a row from the grid.
+ *
+ * Children that are placed in this row are removed,
+ * spanning children that overlap this row have their
+ * height reduced by one, and children below the row
+ * are moved up.
+ *
+ * Since: 3.10
+ */
+void
+gtk_grid_remove_row (GtkGrid *grid,
+                     gint     position)
+{
+  GtkGridPrivate *priv;
+  GtkGridChild *child;
+  GList *list;
+  gint top, height;
+
+  g_return_if_fail (GTK_IS_GRID (grid));
+
+  priv = grid->priv;
+
+  list = priv->children;
+  while (list)
+    {
+      child = list->data;
+      list = list->next;
+
+      top = CHILD_TOP (child);
+      height = CHILD_HEIGHT (child);
+
+      if (top <= position && top + height > position)
+        height--;
+      if (top > position)
+        top--;
+
+      if (height <= 0)
+        gtk_container_remove (GTK_CONTAINER (grid), child->widget);
+      else
+        gtk_container_child_set (GTK_CONTAINER (grid), child->widget,
+                                 "height", height,
+                                 "top-attach", top,
+                                 NULL);
+    }
+}
+
 /**
  * gtk_grid_insert_column:
  * @grid: a #GtkGrid
@@ -1730,6 +1781,57 @@ gtk_grid_insert_column (GtkGrid *grid,
     }
 }
 
+/**
+ * gtk_grid_remove_column:
+ * @grid: a #GtkGrid
+ * @position: the position of the column to remove
+ *
+ * Removes a column from the grid.
+ *
+ * Children that are placed in this column are removed,
+ * spanning children that overlap this column have their
+ * width reduced by one, and children after the column
+ * are moved to the left.
+ *
+ * Since: 3.10
+ */
+void
+gtk_grid_remove_column (GtkGrid *grid,
+                        gint     position)
+{
+  GtkGridPrivate *priv;
+  GtkGridChild *child;
+  GList *list;
+  gint left, width;
+
+  g_return_if_fail (GTK_IS_GRID (grid));
+
+  priv = grid->priv;
+
+  list = priv->children;
+  while (list)
+    {
+      child = list->data;
+      list = list->next;
+
+      left = CHILD_LEFT (child);
+      width = CHILD_WIDTH (child);
+
+      if (left <= position && left + width > position)
+        width--;
+      if (left > position)
+        left--;
+
+      if (width <= 0)
+        gtk_container_remove (GTK_CONTAINER (grid), child->widget);
+      else
+        gtk_container_child_set (GTK_CONTAINER (grid), child->widget,
+                                 "width", width,
+                                 "left-attach", left,
+                                 NULL);
+    }
+}
+
 /**
  * gtk_grid_insert_next_to:
  * @grid: a #GtkGrid
index 0e37277ad7afc39289231c64d7664c344aa130c0..f2d550fe50100d812425bd232fadd59a876e8d58 100644 (file)
@@ -87,6 +87,12 @@ void       gtk_grid_insert_row             (GtkGrid         *grid,
 GDK_AVAILABLE_IN_3_2
 void       gtk_grid_insert_column          (GtkGrid         *grid,
                                             gint             position);
+GDK_AVAILABLE_IN_3_10
+void       gtk_grid_remove_row             (GtkGrid         *grid,
+                                            gint             position);
+GDK_AVAILABLE_IN_3_10
+void       gtk_grid_remove_column          (GtkGrid         *grid,
+                                            gint             position);
 GDK_AVAILABLE_IN_3_2
 void       gtk_grid_insert_next_to         (GtkGrid         *grid,
                                             GtkWidget       *sibling,